package com.ffggffgfv.backend.service;

import com.ffggffgfv.backend.dto.BatchRestockDTO;
import com.ffggffgfv.backend.dto.PageResult;
import com.ffggffgfv.backend.dto.RestockDTO;
import com.ffggffgfv.backend.dto.ShelfProductDetailDTO;
import com.ffggffgfv.backend.entity.ShelfProduct;

import java.util.List;
import java.util.Map;

/**
 * 货架商品服务接口
 */
public interface ShelfProductService {

    /**
     * 获取货架上的所有商品
     *
     * @param shelfId 货架ID
     * @return 货架商品列表
     */
    List<ShelfProduct> findByShelfId(Long shelfId);

    /**
     * 分页查询货架上的商品
     *
     * @param shelfId  货架ID
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    PageResult<ShelfProductDetailDTO> findByShelfIdWithPage(Long shelfId, int pageNum, int pageSize);

    /**
     * 查询货架上的特定商品
     *
     * @param shelfId   货架ID
     * @param productId 商品ID
     * @return 货架商品对象
     */
    ShelfProduct findByShelfIdAndProductId(Long shelfId, Long productId);

    /**
     * 根据RFID标签查询商品
     *
     * @param rfidTag RFID标签
     * @return 包含货架和商品信息的Map
     */
    Map<String, Object> findByRfidTag(String rfidTag);

    /**
     * 补货操作
     *
     * @param shelfId    货架ID
     * @param restockDTO 补货信息
     * @return 操作后的货架商品信息
     */
    ShelfProductDetailDTO restock(Long shelfId, RestockDTO restockDTO);

    /**
     * 批量补货操作
     *
     * @param shelfId         货架ID
     * @param batchRestockDTO 批量补货信息
     * @return 操作结果
     */
    Map<String, Object> batchRestock(Long shelfId, BatchRestockDTO batchRestockDTO);

    /**
     * 移除货架上的商品
     *
     * @param shelfId      货架ID
     * @param productId    商品ID
     * @param quantity     移除数量，若为null则全部移除
     * @param reason       移除原因
     * @param rfidTags     要移除的RFID标签列表
     * @param operatorId   操作人ID
     * @param operatorType 操作人类型
     * @return 操作结果
     */
    Map<String, Object> removeProduct(Long shelfId, Long productId, Integer quantity, String reason,
                                      List<String> rfidTags, Long operatorId, Integer operatorType);
}
